package code07_面向对象.多态;

/**
 * @author 黄衡熙
 * @version 1.0
 * @date 2025年07月21日14:35
 */
public class Test01 {
    public static void main(String[] args) {
        // 编译时类型
        // 运行时类型
        // 对象的多态性,父类Person的引用指向了子类Man的对象
        // 这种方式其实使用的是自动类型转换
        Person person = new Man();
        // 运行时该对象的类型是具体子类的类型
//        System.out.println(person);
        // 既然运行的是子类,那么在调用方法时,其执行的也是子类的方法
        person.show();
        System.out.println("----------------");

        // 既然执行的是子类方法,那么是否可以运行子类独有的方法?
        // 强制类型转换
//       ((Man)person).work();
        Man man = (Man) person;
        man.work();

        System.out.println("*************************");
        Person person2 = new WoMan();
        person2.show();
        // 对于强制类型转换,可能会存在问题
        // 例如:本身person指向的是Man的对象
        // 但是此处将其转换成WoMan,其语法是没问题的
        // 但是Man是无法转换成WoMan的,导致出现了异常
        // 那么为了防止出现这种异常,我们可以在转换前做一个判断
        // 判断这个对象是否可以转换成指定的类型
        if (person2 instanceof WoMan) {
            System.out.println("可以转换");
            WoMan woMan = (WoMan) person2;
            woMan.shopping();
        } else {
            System.out.println("类型不一致,无法转换");
        }
    }
}
